ferror関数は、ファイルポインタで示されるストリームのエラーの状態を調べます。
#include <stdio.h>
int ferror(FILE *stream);
*streamはfopen関数で取得した、ファイルポインタを指定します。
戻り値として、エラーであれば0以外の値を返します。
入力関数の多くはEOF(end of file)あるいは、エラーを検出したらEOF値を返しますので、EOFなのかエラーなのか分かりません。そのような場合に、ferror関数でエラーの状態か否かを調べることができます。
プログラム 例
#include <stdio.h> int main(void) { FILE *fp; int in_data; if ((fp = fopen('temp.txt', 'r')) != NULL) { while((in_data = fgetc(fp)) != EOF) { putchar(in_data); } if (ferror(fp) != 0) { printf('入力エラーです\n'); } else { printf('正常に入力しました\n'); } fclose(fp); } else { printf('ファイルのオープンに失敗しました\n'); } return 0; }
例の実行結果
$ cat temp.txt Hello World!!. $ $ ./ferror.exe Hello World!!. 正常に入力しました $